package com.example;

import java.util.Random;
import java.util.Scanner;

/**
 * 案例六：抢红包
 */
public class Test6 {
    public static void main(String[] args) {
        /*
        需求:个大V直播时发起了抢红包活动,分别有:9,666,188,520,99999五个红包
        请模拟粉丝来抽奖,按照先来先得随机抽取,抽完即止,注意:一个红包只能被抽一次,先抽或后抽哪一个红包是随机的,示例如下(不一定是下面的顺序)
         */
        // 定义红包数组
        int[] moneys = {9, 666, 188, 520, 99999};
        System.out.println("第一种方案");
        prizeDraw1(moneys);

        System.out.println("-----------------------------------------------");

        System.out.println("第二种方案");
        prizeDraw2(moneys);
    }

    /**
     * 模拟抽奖
     * 方案2：
     * 思路：先打乱数组中的顺序,打乱的顺序就认为是中将顺序,然后写一个for循环循环5次每一次都提示抽奖然后依次从数组中取出对应的金额即可
     *
     * @param moneys 红包数组
     */
    public static void prizeDraw2(int[] moneys) {
        Scanner sc = new Scanner(System.in);
        Random r = new Random();
        // 打乱数组中的顺序
        for (int i = 0; i < moneys.length; i++) {
            // 随机一个数组索引范围内的值,然后让当前遍历的数据与该索引位置处的值交换
            int index = r.nextInt(moneys.length);
            // 交换位置
            int temp = moneys[index];
            moneys[index] = moneys[i];
            moneys[i] = temp;
        }
        
        // 当循环结束后,数组中的元素已经打乱,在依次取出即可
        for (int i = 0; i < moneys.length; i++) {
            System.out.print("第" + (i + 1) + "次抽奖,请按任意键开始抽奖:");
            sc.next();
            System.out.println("恭喜您,您抽中了" + moneys[i] + "元");
        }
    }

    /**
     * 模拟抽奖
     * 方案1：
     * 思路：写一个for循环执行5次,每次抽奖都从数组中随机找出一个金额,如果该金额不是0,则表示抽中,则将该金额设置为0,否则继续循环,直到循环5次
     *
     * @param moneys 红包数组
     */
    public static void prizeDraw1(int[] moneys) {
        Scanner sc = new Scanner(System.in);
        Random r = new Random();
        for (int i = 1; i <= moneys.length; i++) {
            // 提示用户输入信息
            System.out.print("请按任意键完成抽奖:");
            String msg = sc.next();
            // 每次循环,键盘录入,提示"用户录入任意键抽奖："
            while (true) {
                // 使用数组的长度作为随机数,随机获取一个索引 生成的取值是0 1 2 3 4 刚好可以对上数组的索引
                int index = r.nextInt(moneys.length);
                int money = moneys[index];
                if (money != 0) {
                    // 如果不为0,则说明该红包还未抽,则进行打印,并把该红包的值设置为0
                    System.out.println("恭喜您,您抽中了" + money + "元");
                    moneys[index] = 0;
                    break;
                }
            }
        }
    }
}
